<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // js中的arguments类数组
        // 为什么函数的arguments参数是类数组而不是数组?如何遍历数组?
        // 类(伪)数组：与数组相似，但是没有数组常见的方法与属性
        (function () {
            console.log(arguments);
            // 最简单的方法就是for循环
            for (let i = 0; i < arguments.length; i++) {
                console.log(arguments[i]);
            }
            console.log('------------');
        })(1, 2, 3, 4);

        // 1.将数组的方法用到类数组上
        // 我们可以使用call、apply、bind，这里复习一下: call需要把参数逐个传入、apply需要把参数放在一个数组里、bind返回的是一个方法而不会执行，其他和bind相同。但是使用第一个参数的时候，第一个参数都是你要对谁进行操作
        (function () {
            Array.prototype.forEach.call(arguments, (item) => {
                console.log(item);
            });
            // Array.prototype.forEach.apply(arguments, [(item) => {
            //     console.log(item);
            // }]);
            // Array.prototype.forEach.bind(arguments, (item) => {
            //     console.log(item);
            // })();
            console.log('--------------');
        })(1, 2, 3, 4);

        // 2. 将类数组变为数组
        (function () {
            // 使用Array.from()和扩展运算符都可以将类数组转换为数组
            let arr1 = Array.from(arguments);
            let arr2 = [...arguments];
            console.log(arr1,arr2)
        })(1, 2, 3, 4);

        // 3. 使用展开运算符将类数组转化为数组  
        // 上面已经展示了，就不再重复了
    </script>
</body>

</html>